package treemap;

import java.util.Map;
import java.util.TreeMap;

public class TestMap {
    public static void main(String[] args) {
        Map<String, String> map = new TreeMap<>();
        //put(key,value) : 插入 key-value 键值对
        map.put("林冲", "豹子头");
        map.put("鲁智深", "花和尚");
        map.put("武松", "行者");
        map.put("宋江", "及时雨");
        String str = map.put("李逵", "黑旋风");
        System.out.println(map.size());
        System.out.println(map);

        // put(key,value): 注意key不能为空 ，但是value可以为空
        // key如果为空 ，会抛出空指针异常 //map.put(null, "花名");
        str = map.put("无名", null);
        System.out.println(map.size());

        // put(key, value):
        // 如果key存在 ，会使用value替换原来key所对应的value ，返回旧value
        str = map.put("李逵", "铁牛");
        // get(key): 返回key所对应的value
        // 如果key存在 ，返回key所对应的value
        // 如果key不存在 ，返回null
        System.out.println(map.get("鲁智深"));
        System.out.println(map.get("史进"));

        //GetOrDefault(): 如果key存在 ，返回与key所对应的value ，如果key不存在 ，返回一个默认值
        System.out.println(map.getOrDefault("李逵", "铁牛"));
        System.out.println(map.getOrDefault("史进", "九纹龙"));
        System.out.println(map.size());

        //containKey(key) ：检测key是否包含在Map中 ，时间复杂度 ：O(logN)
        // 按照红黑树的性质来进行查找
        // 找到返回true ，否则返回false
        System.out.println(map.containsKey("林冲"));
        System.out.println(map.containsKey("史进"));
        // containValue(value): 检测value是否包含在Map中 ，时间复杂度: O(N)
        // 找到返回true ，否则返回false
        System.out.println(map.containsValue("豹子头"));
        System.out.println(map.containsValue("九纹龙"));

        for (String s : map.keySet()) {
            System.out.print(s + " ");
        }
        System.out.println();
       // 打印所有的value
       // values()是将map中的value放在collect的一个集合中返回的
        for (String s : map.values()) {
            System.out.print(s + " ");
        }
        System.out.println();
        // 打印所有的键值对
        // entrySet(): 将Map中的键值对放在Set中返回了
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println(entry.getKey() + "--->" + entry.getValue());
        }
        System.out.println();
    }
}
